OISST: SST Data#
https://www.ncei.noaa.gov/products/optimum-interpolation-sst
import sys
import os
import os.path as op
import xarray as xr
import plotly.express as px
import geopandas as gpd
import pandas as pd
import cartopy.crs as ccrs
import numpy as np
import matplotlib.pyplot as plt
sys.path.append("../../../../indicators_setup")
from ind_setup.plotting import plot_base_map, plot_bar_probs
from ind_setup.plotting_int import plot_timeseries_interactive
lon_site, lat_site = 134.368203, 7.322074
#Area of interest
lon_range = [129.4088, 137.0541]
lat_range = [1.5214, 11.6587]
shp_f = op.join(os.getcwd(), '..', '..','..', 'data/Palau_EEZ/pw_eez_pol_april2022.shp')
shp_eez = gpd.read_file(shp_f)
path_data = "../../../data"
data = xr.load_dataset(op.join(path_data, 'sst_daily_1981_2024_palau.nc'))
dataset_id = 'sst'
ax = plot_base_map(shp_eez = shp_eez, figsize = [10, 6])
im = ax.pcolor(data.lon, data.lat, data.mean(dim='time')[dataset_id], transform=ccrs.PlateCarree(),
cmap = 'hot_r', vmin = np.percentile(data.mean(dim = 'time')[dataset_id], 1),
vmax = np.percentile(data.mean(dim = 'time')[dataset_id], 99))
ax.set_extent([lon_range[0], lon_range[1], lat_range[0], lat_range[1]], crs=ccrs.PlateCarree())
plt.colorbar(im, ax=ax, label='SST (ºC)')
<matplotlib.colorbar.Colorbar at 0x17a4460f0>
Mean Area#
dict_plot = [{'data' : data.mean(dim = ['lon', 'lat']).to_dataframe(),
'var' : dataset_id, 'ax' : 1, 'label' : 'SST - MEAN AREA'},]
fig = plot_timeseries_interactive(dict_plot, trendline=True, scatter_dict = None, figsize = (25, 12));
Mean Area#
data_mean = data.mean(dim = ['lon', 'lat']).to_dataframe()
datag = data_mean.groupby(data_mean.index.year).max()
datag.index = pd.to_datetime(datag.index, format = '%Y')
dict_plot = [{'data' : datag, 'var' : 'sst', 'ax' : 1, 'label':f'Annual Maxima'},]
ax = plot_bar_probs(x = datag.index.year, y = datag.sst.values, trendline=True, figsize = (15, 6),
y_label = 'Maximum SST [ºC]')
ax.set_ylim([29, None])
(29.0, 32.35311899185181)
datam = data_mean.groupby(data_mean.index.year).mean()
datam.index = pd.to_datetime(datag.index, format = '%Y')
dict_plot = [{'data' : datam, 'var' : 'sst', 'ax' : 1, 'label':f'Annual Mean'},]
ax = plot_bar_probs(x = datam.index.year, y = datam.sst.values, trendline=True, figsize = (15, 6),
y_label = 'Mean SST [ºC]')
ax.set_ylim([27, None])
(27.0, 31.222521686553954)
datam = data_mean.groupby(data_mean.index.year).min()
datam.index = pd.to_datetime(datag.index, format = '%Y')
dict_plot = [{'data' : datam, 'var' : 'sst', 'ax' : 1, 'label':f'Annual Minimum'},]
ax = plot_bar_probs(x = datam.index.year, y = datam.sst.values, trendline=True, figsize = (15, 6),
y_label = 'Minimum SST [ºC]')
ax.set_ylim([25, None])
(25.0, 30.36408748626709)